package controle;

import java.sql.SQLException;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import modelo.Produto;
import persistencia.ProdutoDAO;
import modelo.CategoriaProduto;
import persistencia.CategoriaProdutoDAO;

@Named(value = "produtoMB")
@RequestScoped

public class ProdutoMB {

    private Produto produto;
    private ProdutoDAO produtoDAO;
    private List<Produto> produtos;
    private int idInicial;
    private int idFinal;
    private String filtroNome;
    private String filtroCodigoInterno;
    private List<CategoriaProduto> categoriasProduto;
    private CategoriaProdutoDAO categoriaProdutoDAO;
    
    public ProdutoMB() throws SQLException {
        this.produto = new Produto();
        this.produtoDAO = new ProdutoDAO();
        this.produtos = this.listar();
        this.categoriaProdutoDAO = new CategoriaProdutoDAO();
        this.categoriasProduto = categoriaProdutoDAO.getCategoriasProduto("select * from gastro_categoriaproduto");
        //this.listaProdutos("select * from gastro_produto");
        this.listar();
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public Produto getProduto() {
        return this.produto;
    }

    public List<Produto> getProdutos() {
        return this.produtos;
    }

    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }
    
      public List<CategoriaProduto> getCategoriasProduto() {
        return categoriasProduto;
    }

    public void setCategoriasProduto(List<CategoriaProduto> categoriasProduto) {
        this.categoriasProduto = categoriasProduto;
    }   
 
    public void novo() {
        produto = new Produto();
    }

    public int getIdInicial() {
        return idInicial;
    }

    public void setIdInicial(int idInicial) {
        this.idInicial = idInicial;
    }

    public int getIdFinal() {
        return idFinal;
    }

    public void setIdFinal(int idFinal) {
        this.idFinal = idFinal;
    }

    public String getNome() {
        return filtroNome;
    }

    public void setNome(String filtroNome) {
        this.filtroNome = filtroNome;
    }

    public String getCodigoInterno() {
        return filtroCodigoInterno;
    }

    public void setCodigoInterno(String filtroCodigoInterno) {
        this.filtroCodigoInterno = filtroCodigoInterno;
    }

    public void salvar() throws SQLException {
        if (this.produto.getId() == 0) {
           this.produtoDAO.inserir(this.produto);
        } else {
            
            this.produtoDAO.alterar(this.produto);
        }
    }
    
    
    public String editarProduto(Object o) throws SQLException {

        this.setProduto((Produto ) o);
        
        return "cadastrarProduto";
    }

    public void excluir(Produto produto) throws SQLException {
        this.produtoDAO.excluir(produto);
        this.listar();
    }

    public List<Produto> listar() throws SQLException {
        return this.produtoDAO.getProdutos("select * from gastro_produto");
    }

    //ordenação  
    public void ordenaId() throws SQLException {
        this.produtos = this.produtoDAO.getProdutos("select * from gastro_produto order by id");
    }

    public void ordenaNome() throws SQLException {
        this.produtos = this.produtoDAO.getProdutos("select * from gastro_produto order by nome");
    }

    public void ordenaValor() throws SQLException {
       this.produtos = this.produtoDAO.getProdutos("select * from gastro_produto order by valor");
    }

    public void ordenaCodigoInterno() throws SQLException {
      this.produtos = this.produtoDAO.getProdutos("select * from gastro_produto order by codigointerno");
    }

    public void ordenaCategoria() throws SQLException {
      this.produtos = this.produtoDAO.getProdutos("select * from gastro_produto order by categoria");
    }

    public void filtraNome() throws SQLException {
      this.produtos = this.produtoDAO.getProdutos("select * from gastro_produto where nome ilike '%" + this.filtroNome + "%'");
    }

    public void filtraID() throws SQLException {
      this.produtos = this.produtoDAO.getProdutos("select * from gastro_produto where id >= " + idInicial + " and id <= " + idFinal);
    }

    public void filtraCodigoInterno() throws SQLException {
      this.produtos = this.produtoDAO.getProdutos("select * from gastro_produto where codigointerno = " + "'" + this.filtroCodigoInterno + "'");
    }

}
  //end ordenação
